import request from '@/utils/request'
import { getToken } from '@/utils/auth'

// 查询设备波形示教列表
export function listWaveform(query) {
  return request({
    url: '/real/waveform/list',
    method: 'get',
    params: query
  })
}

// 根据设备ID查询波形示教列表 - 使用文档推荐的API
export function getDeviceWaveforms(deviceId, sensorId, options = {}) {
  console.log("getDeviceWaveforms 请求参数:", deviceId, "传感器ID:", sensorId, "选项:", options);

  // 构建查询参数 - 根据API文档优化
  const params = {};

  // 添加传感器ID参数（如果后端支持）
  if (sensorId) {
    params.sensorId = sensorId;
  }

  // 使用文档推荐的 maxPoints 参数（默认3000）
  params.maxPoints = options.maxPoints || 3000;

  console.log("getDeviceWaveforms 完整请求参数:", params);

  return request({
    url: '/real/waveform/device/' + deviceId,
    method: 'get',
    params: params,
    timeout: parseInt(process.env.VUE_APP_WAVEFORM_TIMEOUT) || 180000, // 波形接口专用超时
    headers: {
      'Authorization': 'Bearer ' + getToken()
    }
  }).then(response => {
    console.log("getDeviceWaveforms API响应:", response);
    return response;
  }).catch(error => {
    console.error("getDeviceWaveforms API错误:", error);
    throw error;
  });
}

// 查询设备波形示教详细
export function getWaveform(waveformId) {
  return request({
    url: '/real/waveform/' + waveformId,
    method: 'get'
  })
}

// 新增设备波形示教 - 后端API已移除，但保留前端声明以防在其他地方使用
export function addWaveform(data) {
  return request({
    url: '/real/waveform',
    method: 'post',
    data: data
  })
}

// 修改设备波形示教 - 后端API已移除，但保留前端声明以防在其他地方使用
export function updateWaveform(data) {
  return request({
    url: '/real/waveform',
    method: 'put',
    data: data
  })
}

// 删除设备波形示教 - 后端API已移除，但保留前端声明以防在其他地方使用
export function delWaveform(waveformId) {
  return request({
    url: '/real/waveform/' + waveformId,
    method: 'delete'
  })
}

// 获取设备信息
export function getDeviceInfo(deviceId) {
  return request({
    url: '/gelly/device/' + deviceId,
    method: 'get'
  })
}

// 根据设备ID和时间范围获取波形数据 - 使用文档推荐的API @author qianz
export function getWaveformDataByrangeTime(deviceId, startTime, endTime, sensorId, options = {}) {
  console.log("请求参数:", deviceId, startTime, endTime, "传感器ID:", sensorId, "选项:", options);
  console.log("Token状态:", getToken() ? "Token存在" : "Token不存在");

  let url = '/real/waveform/device/' + deviceId + '/' + encodeURIComponent(startTime) + '/' + encodeURIComponent(endTime);

  // 构建查询参数 - 根据API文档优化
  const params = {};

  // 添加传感器ID参数（如果后端支持）
  if (sensorId) {
    params.sensorId = sensorId;
  }

  // 使用文档推荐的 maxPoints 参数（默认2000用于时间范围查询）
  params.maxPoints = options.maxPoints || 2000;

  console.log("完整请求参数:", params);

  return request({
    url: url,
    method: 'get',
    params: params,
    timeout: parseInt(process.env.VUE_APP_WAVEFORM_TIMEOUT) || 150000, // 时间范围查询超时
    headers: {
      'Authorization': 'Bearer ' + getToken()
    }
  }).then(response => {
    console.log("API响应:", response);
    return response;
  }).catch(error => {
    console.error("API错误:", error);
    throw error;
  });
}

// 无权限版本 - 根据API文档优化 @author qianz
export function getWaveformDataNoAuth(deviceId, startTime, endTime, options = {}) {
  console.log("无权限请求参数:", deviceId, startTime, endTime, "选项:", options);

  const url = '/real/waveform/noauth/device/' + deviceId + '/' + encodeURIComponent(startTime) + '/' + encodeURIComponent(endTime);
  console.log("完整无权限请求URL:", url);

  // 构建查询参数
  const params = {};

  // 使用文档推荐的 maxPoints 参数（默认1000用于无权限版本）
  params.maxPoints = options.maxPoints || 1000;

  return request({
    url: url,
    method: 'get',
    params: params
  }).then(response => {
    console.log("无权限API响应:", response);
    return response;
  }).catch(error => {
    console.error("无权限API错误:", error);
    throw error;
  });
}

// 获取设备完整波形数据（不推荐） - 根据API文档添加
export function getDeviceWaveformsFull(deviceId) {
  console.warn("⚠️ 使用完整数据接口，可能导致超时:", deviceId);

  return request({
    url: '/real/waveform/device/' + deviceId + '/full',
    method: 'get',
    headers: {
      'Authorization': 'Bearer ' + getToken()
    }
  }).then(response => {
    console.log("完整数据API响应:", response);
    return response;
  }).catch(error => {
    console.error("完整数据API错误:", error);
    throw error;
  });
}

// 超级无权限版本 - 完全跳过验证 @author qianz
export function getWaveformDataSuperNoAuth(deviceId, startTime, endTime) {
  console.log("超级无权限请求参数:", deviceId, startTime, endTime);
  console.log("完整超级无权限请求URL:", '/real/waveform/super/device/' + deviceId + '/' + encodeURIComponent(startTime) + '/' + encodeURIComponent(endTime));

  return request({
    url: '/real/waveform/super/device/' + deviceId + '/' + encodeURIComponent(startTime) + '/' + encodeURIComponent(endTime),
    method: 'get'
  }).then(response => {
    console.log("超级无权限API响应:", response);
    return response;
  }).catch(error => {
    console.error("超级无权限API错误:", error);
    throw error;
  });
}

// 直接查询设备数据 - 用于测试 @author qianz
export function getDeviceDataDirect(deviceId) {
  console.log("直接查询设备数据参数:", deviceId);

  return request({
    url: '/real/waveform/direct/' + deviceId,
    method: 'get'
  }).then(response => {
    console.log("直接查询设备数据响应:", response);
    return response;
  }).catch(error => {
    console.error("直接查询设备数据错误:", error);
    throw error;
  });
}

// 根据设备类型获取阈值
export function getThresholdByDeviceType(deviceType) {
  return request({
    url: '/real/thresholdmanage/' + deviceType,
    method: 'get'
  })
}

// 新增阈值
export function addThreshold(data) {
  return request({
    url: '/real/thresholdmanage',
    method: 'post',
    data: data
  })
}

// 修改阈值
export function updateThreshold(data) {
  return request({
    url: '/real/thresholdmanage',
    method: 'put',
    data: data
  })
}

// ==================== 实时波形图相关接口 ====================

// 获取实时波形数据流
export function getRealtimeWaveformStream(deviceId, sensorId) {
  return request({
    url: '/real/waveform/realtime/stream',
    method: 'get',
    params: {
      deviceId,
      sensorId
    }
  })
}

// 获取最近的波形数据（用于实时模式初始化）
export function getRecentWaveformData(deviceId, sensorId, minutes = 5) {
  const endTime = new Date()
  const startTime = new Date(endTime.getTime() - minutes * 60 * 1000)

  return request({
    url: '/real/waveform/recent',
    method: 'get',
    params: {
      deviceId,
      sensorId,
      startTime: startTime.toISOString(),
      endTime: endTime.toISOString()
    }
  })
}

// 订阅设备实时数据
export function subscribeDeviceRealtime(deviceId, sensorId) {
  return request({
    url: '/real/waveform/subscribe',
    method: 'post',
    data: {
      deviceId,
      sensorId
    }
  })
}

// 取消订阅设备实时数据
export function unsubscribeDeviceRealtime(deviceId, sensorId) {
  return request({
    url: '/real/waveform/unsubscribe',
    method: 'post',
    data: {
      deviceId,
      sensorId
    }
  })
}

// 获取设备列表（用于实时监控页面）
export function getDeviceListForRealtime() {
  return request({
    url: '/real/waveform/devices',
    method: 'get'
  })
}

// 获取设备传感器列表
export function getDeviceSensors(deviceId) {
  return request({
    url: `/real/waveform/device/${deviceId}/sensors`,
    method: 'get'
  })
}
// 添加获取设备时间范围的新方法
export function getDeviceTimeRange(deviceId) {
  return request({
    url: `/real/waveform/device/${deviceId}/timerange`,
    method: 'get'
  })
}

